package com.test.scope;

import com.test.factory.ConfigurableBeanFactory;

/**
 * ScopeRegister类用于在Bean工厂中注册各种作用域
 */
public class ScopeRegister {

    /**
     * 注册标准作用域（singleton和prototype）
     *
     * @param beanFactory ConfigurableBeanFactory类型的实例，用于注册作用域
     */
    public static void registerStandardScopes(ConfigurableBeanFactory beanFactory) {
        beanFactory.registerScope(ConfigurableBeanFactory.SCOPE_SINGLETON, new SingletonScope());
        beanFactory.registerScope(ConfigurableBeanFactory.SCOPE_PROTOTYPE, new PrototypeScope());
    }

    /**
     * 注册Web应用相关的作用域（request和session）
     *
     * @param beanFactory ConfigurableBeanFactory类型的实例，用于注册作用域
     */
    public static void registerWebScopes(ConfigurableBeanFactory beanFactory) {
        beanFactory.registerScope("request", new RequestScope());
        beanFactory.registerScope("session", new SessionScope());
    }

    /**
     * 注册所有支持的作用域，包括标准作用域和Web应用相关的作用域
     * 如果环境不支持Web应用相关的作用域（如没有javax.servlet.ServletRequest类），则只注册标准作用域
     *
     * @param beanFactory ConfigurableBeanFactory类型的实例，用于注册作用域
     */
    public static void registerAllScopes(ConfigurableBeanFactory beanFactory) {
        registerStandardScopes(beanFactory);

        try{
            Class.forName("javax.servlet.ServletRequest");
            registerWebScopes(beanFactory);
        }catch (ClassNotFoundException e){
            System.out.println("Web scope not supported");
        }
    }
}
